package main

import (
	"fmt"
	"strconv"
	"unsafe"
)

//全局变量
var (
	a = 10
	b = "gloab"
)

func main() {
	//1 一次声明多个变量
	var i, j int
	fmt.Println(i, j)

	n, m := "hello", "world"
	fmt.Println(n, m)

	//2 变量类型
	var c int64 = 12
	fmt.Printf("c的类型为%T,占用的字节长度为%v", c, unsafe.Sizeof(c))

	//3 反引号 原样输出
	s := `hello\n\t`
	fmt.Println("s：%v", s)

	//4 类型转化
	var o int8 = 12
	var x int16 = int16(o)
	fmt.Printf("x=%v\n", x)
	o = int8(x)
	fmt.Printf("o=%v\n", o)

	//5 打印Sprintf有返回值
	var r = fmt.Sprintf("%v", "yangjie")
	if r == "yangjie" {
		fmt.Printf("ok\n")
	}

	//6 strconv
	p := 5
	//返回i的base进制的字符串表示。base 必须在2到36之间，结果中会使用小写字母'a'到'z'表示大于10的数字
	fmt.Println(strconv.FormatInt(int64(p), 2))

	//根据b的值返回"true"或"false"
	b := false
	fmt.Println(strconv.FormatBool(b))

	//Itoa是FormatInt(i, 10) 的简写
	fmt.Println(strconv.Itoa('a'))

	//类型转化
	e, ok := strconv.ParseBool("true")
	if ok == nil {
		fmt.Printf("e type is：%T", e)
	}

	//7 const iota
	const (
		aa = iota //iota是常量的计数器，从0开始，组中每定义一个常量自动递增1
		bb = iota
	)

	fmt.Printf("a is:%v\n", aa)
	fmt.Printf("b is:%v\n", bb)
}
